#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
 
typedef struct 
{	
	ElemType data[MaxSize];
	int top;				//栈指针
} SqStack;					//顺序栈类型
 
void InitStack(SqStack *&s)
{
	s=(SqStack *)malloc(sizeof(SqStack));
	s->top=-1;
} 
 
void DestroyStack(SqStack *&s)
{
	free(s);
}
 
bool StackEmpty(SqStack *s)
{
	return(s->top==-1);
}
 
bool Push(SqStack *&s,ElemType e)
{
	if (s->top==MaxSize-1)    //栈满的情况，即栈上溢出
		return false;
	s->top++;
	s->data[s->top]=e;
	return true;
}
 
bool Pop(SqStack *&s,ElemType &e)
{
	if (s->top==-1)		//栈为空的情况，即栈下溢出
		return false;
	e=s->data[s->top];
	s->top--;
	return true;
} 
 
bool GetTop(SqStack *s,ElemType &e)
{
	if (s->top==-1) 		//栈为空的情况，即栈下溢出
		return false;
	e=s->data[s->top];
	return true;
}
 
 
int main()
{	
	ElemType e;
	SqStack *s;
	char ch[5]={'a','b', 'c','d','e'};
	int i=0;
	int length =5;
	printf("\n");
	printf(" (1)初始化栈\n");
	InitStack(s);
	printf(" (2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (3)依次进栈元素a,b,c,d,e\n");
	while(i<length)
	{	Push(s,ch[i]);
		i++;
		}	
		
	printf(" (4)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (5)出栈序列：");
	while(!(StackEmpty(s)))
	{
		Pop(s,e);
		printf(" %c ",e);
	}
	printf("\n");
	printf(" (6)栈为%s\n",(StackEmpty(s)?"空":"非空"));
	printf(" (7)释放栈\n");
	DestroyStack(s);
	
}